#!/usr/bin/python
# -*-coding:UTF-8 -*-

# ========================
# @Time  : 2021/3/4
# @Author: Sunny
# ========================
import time

"""
是同步执行的，不是异步
python3.5以前就是以类似生成器的原理，来实现协程的
协程切换几乎不耗费资源，跟生成器一样，切换速度非常快
"""


def decorator(func):
    def wrapper(*args):
        # 获取程序执行前的时间
        start = time.time()
        # 执行功能程序
        func(*args)
        # 获取程序执行后的时间
        end = time.time()
        print(f'程序的执行时间为:{end - start}')
        return end - start

    return wrapper


# 线程中微程序（协程）切换的速度特别快，几乎不耗费任何资源
# 如果不输出“浇花”涉及到磁盘读写操作的话，基本上切换600万次也只需要1秒
def work1():
    for i in range(3000000):
        # print(f'work1--浇花---{i}')
        # time.sleep(0.5)
        yield


def work2():
    for i in range(3000000):
        # print(f'work1--打墙---{i}')
        # time.sleep(0.5)
        yield


@decorator
def main():
    g1 = work1()
    g2 = work2()
    while True:
        try:
            next(g1)
            next(g2)
        except StopIteration:
            break


# 但是通过生成器这种方式实现，只是看起来程序是一起运行的，但实际是同步运行，不是异步运行
# 通过程序运行时间就可以看出来
main()

# print()
# next(g1)
# next(g2)
# next(g1)
# next(g2)
# next(g1)
# next(g2)
